package com.green.voluntaryfiling.util;

import java.text.DecimalFormat;

//当学生为理科或物理科，则调用该方法进行预测录取率
public class PhysicsSchoolMatchingAcceptedUtil {
    /**
     *
     * @param ranking 学校录取最低排位
     * @param st_ranking 学生排位
     * @param score 学校录取最低分数
     * @param st_score 学生分数
     * @param accpectedPerson 学校招生人数
     * @return
     */
    public static Double percent(Integer ranking,Integer st_ranking,Double score, Double st_score,Integer accpectedPerson){
        DecimalFormat df = new DecimalFormat("#0.00");
        Double total_percent=0.0;//总预测值=分数预测值+排位预测值+录取人数预测值
        Double score_percent=0.0;//分数预测值，占比30%
        Double ranking_percent=0.0;//排位预测值，占比60%
        Double accpected_percent=0.0;//录取人数预测值，占比10%

        Double max_score=st_score+30.0;
        Double min_score=st_score-25.0;

        //如果学生分数较高，学生的最高分数为750；
        if(max_score>=750.0){
            max_score=750.0;
        }
        //如果学生分数较低，学生的最低分数为200；
        if(min_score<=200.0){
            min_score=200.0;
        }

        Double top_ranking=0.0;//高排位
        Double bottom_ranking=0.0;//低排位
        //获取学生分数的排位进行筛选，根据位次,
        // 目前只考虑理科的选项（统一理科处理）
        if(st_ranking<=722){
            top_ranking = st_ranking - 15*29.0;
            bottom_ranking = st_ranking +20*29.0;
        }else if(st_ranking<=3567){
            top_ranking = st_ranking - 15*113.0;
            bottom_ranking = st_ranking + 20*113.0;
        }else if(st_ranking<=9704){
            top_ranking = st_ranking - 15*245.0;
            bottom_ranking = st_ranking + 20*245.0;
        }else if(st_ranking<=20135){
            top_ranking = st_ranking - 15*417.0;
            bottom_ranking = st_ranking + 20*417.0;
        }else if(st_ranking<=35295){
            top_ranking = st_ranking - 15*606.0;
            bottom_ranking = st_ranking + 20*606.0;
        }else if(st_ranking<=55286){
            top_ranking = st_ranking - 15*800.0;
            bottom_ranking = st_ranking + 20*800.0;
        }else if(st_ranking<=79870){
            top_ranking = st_ranking - 15*983.0;
            bottom_ranking = st_ranking + 20*983.0;
        }else if(st_ranking<=107991){
            top_ranking = st_ranking - 15*1125.0;
            bottom_ranking = st_ranking + 20*1125.0;
        }else if(st_ranking<=138042){
            top_ranking = st_ranking - 15*1200.0;
            bottom_ranking = st_ranking + 20*1200.0;
        }else if(st_ranking<=168956){
            top_ranking = st_ranking - 15*1236.0;
            bottom_ranking = st_ranking + 20*1236.0;
        }else if(st_ranking<=199508){
            top_ranking = st_ranking - 15*1222.0;
            bottom_ranking = st_ranking + 20*1222.0;
        }else if(st_ranking<=227955){
            top_ranking = st_ranking - 15*1137.0;
            bottom_ranking = st_ranking + 20*1137.0;
        }else if(st_ranking<=253995){
            top_ranking = st_ranking - 15*1041.0;
            bottom_ranking = st_ranking + 20*1041.0;
        }else if(st_ranking<=276935){
            top_ranking = st_ranking - 15*917.0;
            bottom_ranking = st_ranking + 20*917.0;
        }else if(st_ranking<=296608){
            top_ranking = st_ranking - 15*787.0;
            bottom_ranking = st_ranking + 20*787.0;
        }else if(st_ranking<=313563){
            top_ranking = st_ranking - 15*678.0;
            bottom_ranking = st_ranking + 20*678.0;
        }else if(st_ranking<=327922){
            top_ranking = st_ranking - 15*575.0;
            bottom_ranking = st_ranking + 20*575.0;
        }else if(st_ranking<=340249){
            top_ranking = st_ranking - 15*493.0;
            bottom_ranking = st_ranking + 20*493.0;
        }else if(st_ranking<=359887){
            top_ranking = st_ranking - 15*400.0;
            bottom_ranking = st_ranking + 20*400.0;
        }else {
            top_ranking = st_ranking - 15 *400.0;
            bottom_ranking = st_ranking + 20*400.0;
        }


        //处理两种极端情况
        if(top_ranking<=1.0){
            top_ranking = 1.0;
        }
        if(bottom_ranking>=367887.0){
            bottom_ranking=367887.0;
        }
        //如果学校录取最低分数大于最大分数且学校录取最低排位小于top_ranking
//        if(score>max_score&&ranking<top_ranking){
//            total_percent=0.0;
//            return Double.valueOf(df.format(total_percent*100));
//        }
        //如果学校录取最低分数大于最大分数且学校录取最低排位大于top_ranking
        if(score<min_score&&ranking>bottom_ranking&&accpectedPerson>=1000){
            total_percent=1.0;
            return Double.valueOf(df.format(total_percent*100));
        }

        //处理分数预测值算法
        //如果分数高于录取分数15，则取满分，否则按一定比例扣除
        //如果分数低于录取分数20分，则取0分，否则按一定比例扣除
        if(score<=max_score&&score>=min_score){
            //如果分数高于录取分数15，则取满分，否则按一定比例扣除
            if(max_score-score>=45){
                score_percent=0.30;
            }else if(max_score-score<=15){
                score_percent=0.00;
            }else {
                //此处max_score-score取值范围为15-45
                //暂时乘以0.4，后续改为0.3
                score_percent = ((max_score-score)-15.0)/30 * 0.3;
            }
        }

        //处理排位预测值算法
        if(st_ranking<=722){
            //大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *29.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *29.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/29.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/29.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=3567){
            //大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *113.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *113.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/113.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/400.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=9704){
            //大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *245.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *245.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/245.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/245.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=20135){
            //大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            //如果排位低于12分的排位数，则取满分，否则按一定比例扣除
            if(bottom_ranking-ranking>=29 *417.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *417.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/417.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/417.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }

        }else if(st_ranking<=35295){
            //大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *606.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *606.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/606.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/606.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=55286){
            //800大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *800.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *800.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/800.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/800.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=79870){
            //1000大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *983.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *983.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/983.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/983.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=107991){
            //1150大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *1125.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *1125.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/1125.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/1125.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=138042){
            //1200大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *1200.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *1200.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/1200.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/1200.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=168956){
            //1250大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *1236.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *1236.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/1236.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/1236.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=199508){
            //1200大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *1222.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *1222.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/1222.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/1222.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=227955){
            //1150大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *1137.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *1137.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/1137.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/1137.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }

        }else if(st_ranking<=253995){
            //1000大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *1041.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *1041.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/1041.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/1041.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=276935){
            //900大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *917.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *917.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/917.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/917.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=296608){
            //800大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *787.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *787.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/787.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/787.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=313563){
            //700大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *678.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *678.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/678.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/678.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=327922){
            //600大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *575.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *575.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/575.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/575.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=340249){
            //500大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *493.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *493.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/493.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/493.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else if(st_ranking<=359887){
            //400大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *400.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *400.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/400.0)-8.0)/21.0)*0.6;
                if( (((Math.abs(ranking-top_ranking)/400.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }
            }


        }else {
            //大概排位取值为低于9分  大于12分区间，如果低于9分的排位数以上，则取0.6；大于12分以上则取0.0；否则，按一定比例扣除
            if(bottom_ranking-ranking>=29 *400.0){
                ranking_percent=0.00;
            }else if(bottom_ranking-ranking<=8 *400.0) {
                //如果排位高于9分的排位数，则取满分，否则按一定比例扣除
                ranking_percent = 0.60;
            }else if(ranking<=bottom_ranking&&ranking>=top_ranking){
                ranking_percent = (((Math.abs(ranking-top_ranking)/400.0)-8.0)/21.0)*0.6;

                if( (((Math.abs(ranking-top_ranking)/400.0)-8.0)/21.0)<=0){
                    ranking_percent=0.0;
                }

            }


        }

        //处理学校录取人数预测值
        if(accpectedPerson>=1000){
            accpected_percent=0.1;
        }else if(accpectedPerson>=100){
            accpected_percent=0.09;
        }else if(accpectedPerson<=10&&accpectedPerson>=1){
            accpected_percent=0.02;
        }else if(accpectedPerson<1){
            accpected_percent = 0.0;
        }else {
            accpected_percent=(((accpectedPerson-10)/90)*70)+0.02;
        }

        total_percent = score_percent+ranking_percent+accpected_percent;


        return Double.valueOf(df.format(total_percent*100));
    }
}
